package com.yidu.action;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.yidu.comment.Message;
import com.yidu.comment.Page;
import com.yidu.comment.Tools;
import com.yidu.model.SnBranch;
import com.yidu.model.SnRole;
import com.yidu.model.SnUser;
import com.yidu.model.SnUserRole;
import com.yidu.service.SnRoleService;
import com.yidu.service.SnUserService;

/**
 * 
 * 描述:用户表的action
 * @author 骆军  
 * @下午2:48:25
 */
@Controller
@RequestMapping("/UserAction")
public class SnUserAction {
	
	/**
	 * 注入角色Service
	 */
	@Resource
	private SnRoleService roleService;
	
	
	/**
	 * 注入用户表的service
	 */
	@Resource
	SnUserService snUserService;
	
	/**
	 * 判断用户名是否已存在
	 * @param name 用户名
	 * @return mes 1用户名已存在0用户名可用
	 */
	@RequestMapping("/findBrandByName")
	@ResponseBody
	public Message findBrandByName(String name){
		Message mes=new Message();
		//查询是否有输入的用户名
		int rel = snUserService.selectOnlin(name);
		//如果为1（没有该用户名）即可用	
		if(rel>0){
			mes.setMsg("用户名已经存在，请使用其他用户名");
			mes.setState(1);
		}else{
			mes.setMsg("用户名可用");
			mes.setState(0);
		}
		return mes;
	}

	
	/**
	 * 修改获取角色权限
	 * @param userId 用户id
	 * @return 角色对象id
	 */
	@RequestMapping("selectName")
	@ResponseBody
	public List <SnUserRole> selectName(String userId){
		return snUserService.selectName(userId);
		
	}
	
	/**
	 * 查询分公司名称
	 * @return 分公司对象
	 */
	@RequestMapping("findbyName")
	@ResponseBody
	public List<SnBranch> findbyName(){
		return snUserService.findbyName();
		
	}
	
	/**
	 * 查询角色
	 * @return 角色表对象
	 */
	@RequestMapping("findAll")
	@ResponseBody
	public List<SnRole> findAll(){
		return snUserService.findAll();
	}

	/**
	 * 增加或修改
	 * @param file 图片
	 * @param request 请求
	 * @param user 用户对象
	 * @param ronId 角色id
	 * @return 0是增加1是修改
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@RequestMapping("addorUpdate")
	public String addorUpdate(@RequestParam(value = "file", required = false)MultipartFile file,HttpServletRequest request,SnUser user,String ronId,HttpSession session) throws IllegalStateException, IOException{
		//取到当前图片
		String path=Tools.getRealPath(request, file);
		//给用户图片复制
		user.setUserImage(path);
		//给当前时间赋值
		user.setOptime(Tools.getCurDateTime());
		//取到当前登陆的session
		SnUser users = (SnUser) session.getAttribute("user");
		//通过session给操作人赋值
		user.setOper(users.getUserName());
		//给当前状态赋值
		user.setUserState(Integer.valueOf(1));
		//把用户，用户id和session传到方法里
		int rows=snUserService.addorUpdate(user,ronId, session);
		//在重定向到其他页面
		return "redirect:../page/lj/snuser.html";
	}
	
	
	/**
	 * 分页查询
	 * @param page 当前页数
	 * @param limit 每页多少行
	 * @param user 用户表
	 * @return 用户model
	 */
	@RequestMapping("selectAll")
	@ResponseBody
	public Map<String, Object> selectAll(String page,String limit, SnUser user){
		//new一个对象
		Page pages=new Page();
		//给当前页数赋值
		pages.setCurPage(Integer.valueOf(page));
		//当前每页多少行赋值
		pages.setRows(Integer.valueOf(limit));
		//创建一个map对象，把查询分页的值和对象放到map中
		Map<String,Object> map=new HashMap<>();
		map.put("page",pages);
		map.put("user",user);
		//条件查询全部map
		List<SnUser> list=snUserService.selectAll(map); 
		//查询总行数map
		int count=snUserService.findCount(map);
		//创建一个map集合
		Map<String,Object> maps=new HashMap<>();
		maps.put("code", 0);
		maps.put("msg", 0);
		//赋值总行数
		maps.put("count", count);
		//赋值查询分页的值
		maps.put("data",list);
		//返回maps
		return maps;
	}
	/**
	 *根据id删除 
	 * @param userId 用户表id
	 * @return 0是删除成功1是删除失败
	 */
	@RequestMapping("delete")
	@ResponseBody
	public int detele(String userId){
		//调用根据id查询
		SnUser record=snUserService.selectByPrimaryKey(userId);
		//修改数据为不可用
		record.setIsva(0);
		//调用修改的方法
		int son=snUserService.updateByPrimaryKeySelective(record);
		return son;
		
	}
	
	/**
	 * 根据id查询
	 * @param userId 用户id
	 * @return 用户表的service
	 */
	@RequestMapping("findById")
	@ResponseBody
	public SnUser findById(String userId){
		return snUserService.selectByPrimaryKey(userId);
	}
	
	/**
	 * 查询所有
	 * @return  用户表的list
	 */
	@RequestMapping("query")
	@ResponseBody
	public List<SnUser> query(){
		//调用查询所有的方法
		return snUserService.query();
	}
	
}
